package com.teamwork_backend.controller;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.teamwork_backend.entity.Companys;
import com.teamwork_backend.entity.Users;
import com.teamwork_backend.service.CompanysService;
import com.teamwork_backend.utils.DataResult;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;


/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author windy
 * @since 2021-04-25
 */
@RestController
@RequestMapping("/companys")
@Api(value = "UsersController", tags = {"企业/平台登录注册接口"})
public class CompanysController {
    @Autowired
    private CompanysService companysService;
    /** 企业/注册平台用户账户
     */
    @PostMapping("reg") // Post方法
    @ApiOperation(value = "注册平台用户账户", notes = "注册平台用户账户", httpMethod = "POST")
    // GET请求会直接在函数括号里面跟参数，并且写在外面写@ApiImplicitParams注解
    // POST请求需要写@RequestBody请求体，通过参数对象来传参数，一定要注意否则前端Vue+axios接收不了参数
    public DataResult reg(
            @ApiParam(name = "companys", value = "平台账户对象", required = true)
            @RequestBody Companys companys)
    {
        //companys.setType(1);
        // 设置添加成功的返回标志
        boolean flag = companysService.save(companys);

        if (flag) {
            // 成功返回数据
            return DataResult.finished().message("用户注册成功！");
        } else {
            // 失败返回数据
            return DataResult.failed().message("用户注册失败！");
        }
    }

    /** 企业/删除平台用户 */
    @GetMapping("del") // Get方法
    @ApiOperation(value = "删除平台用户", notes = "删除平台用户", httpMethod = "GET")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyid", value = "用户唯一标示", required = true, dataType = "string")})
    // GET请求会直接在函数括号里面跟参数，并且写在外面写@ApiImplicitParams注解
    // POST请求需要写@RequestBody请求体，通过参数对象来传参数，一定要注意否则前端Vue+axios接收不了参数
    public DataResult del(String companyid) {
        // 设置删除成功的返回标志
        boolean flag = companysService.removeById(companyid); // 删除

        if (flag) {
            // 成功返回数据
            return DataResult.finished().message("用户删除成功！");
        } else {
            // 失败返回数据
            return DataResult.failed().message("用户删除失败！");
        }
    }

    /** 企业/修改平台用户 */
    @PostMapping("update") // Post方法
    @ApiOperation(value = "修改平台用户", notes = "修改平台用户", httpMethod = "POST")
    // GET请求会直接在函数括号里面跟参数，并且写在外面写@ApiImplicitParams注解
    // POST请求需要写@RequestBody请求体，通过参数对象来传参数，一定要注意否则前端Vue+axios接收不了参数
    public DataResult update(
            @ApiParam(name = "companys", value = "修改平台用户实体", required = true)
            @RequestBody Companys companys) {

        // 设置添加成功的返回标志
        boolean flag = companysService.updateById(companys); // 修改

        if (flag) {
            // 成功返回数据
            return DataResult.finished().message("用户修改成功！");
        } else {
            // 失败返回数据
            return DataResult.failed().message("用户修改失败！");
        }
    }
    /** 企业登录 */
    @PostMapping("login") // Post方法
    @ApiOperation(value = "企业登录", notes = "企业登录", httpMethod = "POST")
    // GET请求会直接在函数括号里面跟参数，并且写在外面写@ApiImplicitParams注解
    // POST请求需要写@RequestBody请求体，通过参数对象来传参数，一定要注意否则前端Vue+axios接收不了参数
    public DataResult login(
            @ApiParam(name = "companys", value = "修改企业实体", required = true)
            @RequestBody Companys companys, HttpSession session) {

        String account = companys.getAccount();
        String password = companys.getPassword();
        int type = companys.getType();
        QueryWrapper<Companys> wrapper = new QueryWrapper<>();
        wrapper.select().eq("account",account).eq("password",password).eq("type",type);
        Companys loginuser = companysService.getOne(wrapper);
        if(loginuser==null) {
            return DataResult.failed().message("请检查账户或密码是否正确！");
        } else {
            // 因为登录成功后密码不能在网络中传输，所以要设置为null，返回的数据会自动过滤掉此字段
            loginuser.setPassword(null);
            session.setAttribute("sessionName",loginuser);
            return DataResult.finished().data("data", loginuser).message("用户登录成功！");
        }
    }

    @GetMapping("getsession") // Post方法
    public Object getsession(HttpSession session){
        return session.getAttribute("sessionName");
    }





}

